﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controllers;
using GestorDeFlotasDesktop.Listados;

namespace GestorDeFlotasDesktop
{
    public partial class AsignacionChoferAuto : Form
    {
        public AsignacionChoferAuto()
        {
            InitializeComponent();
        }

        #region Propiedades
        private bool valido = true;
        private Auto _autoSeleccionado;
        public Auto autoSeleccionado
        {
            get { return _autoSeleccionado; }
            set
            {
                _autoSeleccionado = value;
                if (value != null)
                    txtAuto.Text = _autoSeleccionado.Auto_Patente;
            }
        }

        private Chofer _ChoferSeleccionado;
        public Chofer ChoferSeleccionado
        {
            get { return _ChoferSeleccionado; }
            set
            {
                _ChoferSeleccionado = value;
                if (value != null)
                    txtChofer.Text = _ChoferSeleccionado.Chofer_Dni + " " + _ChoferSeleccionado.Chofer_Nombre + " " + _ChoferSeleccionado.Chofer_Apellido;
            }
        }
        #endregion

        #region Eventos

        private void AsignacionChoferAuto_Load(object sender, EventArgs e)
        {
            cmbTurno.DataSource = TurnoController.ObtenerTodosHabilitados("");
            cmbTurno.DisplayMember = "Turno_Descripcion";
            cmbTurno.ValueMember = "Turno_Id";
            cmbTurno.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            cmbTurno.AutoCompleteSource = AutoCompleteSource.ListItems;
        }

        private void btnSeleccionarAuto_Click(object sender, EventArgs e)
        {
            var lstAutos = new lstAutos { operacion = Operacion.Seleccion, frmAsignacionChoferAuto = this };
            lstAutos.Show();
        }

        private void btnSeleccionarChofer_Click(object sender, EventArgs e)
        {
            var lstchofer = new lstChoferes { operacion = Operacion.Seleccion, frmAsignacionChoferAuto = this, frm = "AsignacionChoferAuto" };
            lstchofer.Show();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            ValidarForm(sender, e);
            if (!valido) return;

            var asignacion = CargarObjeto();
            if (!AsignacionController.ExisteAsignacion(asignacion))
            {
                AsignacionController.Agregar(asignacion);

                MessageBox.Show("La asignación fue realizada con éxito");
                LimpiarForm();
                Close();
            }
            else
            {
                MessageBox.Show("La asignación no puede ser realizada ya que existe una con los mismos datos","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarForm();
        }

        #endregion

        #region Metodos del Form

        private Asignacion CargarObjeto()
        {
            return new Asignacion
                       {
                           Asignacion_AutoId = autoSeleccionado.Auto_Id,
                           Asignacion_ChoferId = ChoferSeleccionado.Chofer_Id,
                           Asignacion_TurnoId = Convert.ToInt32(cmbTurno.SelectedValue),
                           Asignacion_Fecha = dtpFecha.Value
                       };
        }

        private void LimpiarForm()
        {
            txtAuto.Text = "";
            txtChofer.Text = "";
            dtpFecha.Value = DateTime.Today;
            cmbTurno.SelectedIndex = 0;
        }

        #endregion

        #region Validaciones

        private void ValidarForm(object sender, EventArgs e)
        {
            valido = true;
            cmbTurno_Validated(sender, e);
            ValidarAuto();
            ValidarChofer();
        }

        private void ValidarAuto()
        {
            if (string.IsNullOrEmpty(txtAuto.Text))
            {
                errProvider.SetError(txtAuto, "Debe seleccionar un auto");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtAuto, "");
            }
        }

        private void ValidarChofer()
        {
            if (string.IsNullOrEmpty(txtChofer.Text))
            {
                errProvider.SetError(txtChofer, "Debe seleccionar un chofer");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtChofer, "");
            }
        }

        private void cmbTurno_Validated(object sender, EventArgs e)
        {
            if (cmbTurno.SelectedValue == null || (int)cmbTurno.SelectedValue == 0)
            {
                errProvider.SetError(cmbTurno, "Debe seleccionar un turno");
                valido = false;
            }
            else
            {
                errProvider.SetError(cmbTurno, "");
            }
        }

        #endregion

    }
}
